1장. 선형대수
AI 엔지니어링 선수지식 — 1장. 대상: 고등학생·학부 1년차.
1. 선형대수
LLM 의 모든 입출력은 숫자 묶음(벡터)과 숫자 표(행렬)입니다. "강아지" 라는 단어를 컴퓨터가 이해하려면 수백 개의 숫자 묶음으로 바꿔야 하는데, 그 변환·연산·비교가 모두 선형대수입니다.
1.1 벡터 (Vector)
여러 숫자를 순서대로 묶은 묶음입니다. 화살표로도, 숫자 리스트로도 표현할 수 있습니다.
비유 1 — 화살표. "북동쪽으로 5km" 라는 말에는 방향(북동)과 크기(5km)가 함께 담겨 있습니다. 벡터가 정확히 이렇습니다. [3, 4] 는 x로 3, y로 4 간 화살표(길이 5)입니다.
비유 2 — 친구 정보 카드. [키 172, 몸무게 65, 시력 1.2] 는 한 친구를 나타내는 3차원 벡터입니다. 우리는 3차원까지만 그릴 수 있지만, 컴퓨터는 수천 차원도 똑같이 다룹니다.
실생활 예 — 영화 추천. 넷플릭스는 사용자를 [액션 80, 로맨스 30, 코미디 50], 영화를 [액션 90, 로맨스 5, 코미디 20] 으로 저장합니다. 두 벡터의 방향이 비슷하면 추천이 됩니다.
직접 해보기 — 벡터
[3, 4]의 길이는 각 숫자를 제곱해 더한 뒤(3²+4²=25) 루트를 씌워 √25 = 5 입니다(피타고라스 정리).[6, 8]은 √100 = 10 으로, 방향은 같고 길이만 2배입니다.
import numpy as np
v = np.array([3, 4])
print(np.linalg.norm(v)) # 5.0 (길이)
print(v / np.linalg.norm(v)) # [0.6 0.8] (단위벡터)
y
4 | ● (3,4)
3 | /:
| / : ← 길이 = √(3²+4²) = 5
0 +----+---+--- x
0 3
실무. 추천 시스템은 사용자와 상품을 모두 벡터로 저장합니다. 쿠팡·유튜브·스포티파이의 "추천" 이 곧 벡터 거리 계산입니다.
LLM 연결. 거대 언어모델은 "강아지" 를 768~4096 차원 벡터(임베딩)로 바꿉니다. 비슷한 뜻의 단어는 비슷한 방향을 가지며, EP2(임베딩)·EP4(어텐션)로 발전합니다.
더 깊이 — 3Blue1Brown 벡터편 · Khan Academy
1.2 행렬 (Matrix)
벡터를 여러 줄 쌓은 숫자 표(행 × 열 격자)입니다. 즉 행렬은 벡터의 묶음입니다.
비유 1 — 엑셀 시트. 학생 30명의 [국어, 영어, 수학] 점수는 30행 × 3열 표가 됩니다. 한 행이 한 학생의 점수 벡터죠.
비유 2 — 흑백 사진. 1920×1080 사진은 1080행 × 1920열 행렬(각 칸은 0~255 밝기)입니다. 컴퓨터에게 사진은 곧 행렬입니다.
실생활 예 — 영화관 좌석표. 행(A~J) × 열(1~20) 격자에 예매=1·빈자리=0 을 채우면, "몇 자리 남았나" 는 0 의 개수가 됩니다.
직접 해보기 —
[[90, 85, 100], [70, 95, 80]]은 행 2개·열 3개라서 shape = (2, 3), "2명 × 3과목" 입니다. 행렬 모양 읽기는 코딩에서 가장 자주 하는 일입니다.
M = np.array([[90, 85, 100], [70, 95, 80]])
print(M.shape) # (2, 3)
print(M[:, 2]) # [100 80] (수학 점수 열)
실무. 이미지(픽셀 행렬)·표 데이터·문장(단어 벡터 쌓기)이 전부 행렬입니다. 데이터 분석의 기본 단위죠.
LLM 연결. 문장 "나는 학교에 간다" 는 단어 4개 × 768 차원 = 4×768 행렬이 됩니다. 모델 가중치도 전부 거대 행렬입니다.
더 깊이 — Khan Academy: Matrices
1.3 내적 (Dot Product)
두 벡터를 같은 자리끼리 곱해 모두 더한 하나의 숫자입니다. "두 벡터가 얼마나 같은 방향인가" 를 나타내는 점수죠.
비유 1 — 취향 궁합. 나 [액션5, 로맨스1, 코미디4] 와 친구 [액션4, 로맨스2, 코미디5] 는 둘 다 액션·코미디가 높아 내적 값이 큽니다 = 궁합이 좋다는 뜻입니다.
비유 2 — 손전등과 벽. 정면으로 비추면 밝고(내적 큼), 비스듬하면 어둡고(작음), 90도 옆이면 안 닿습니다(내적 0 = 직각).
직접 해보기 —
[5, 1, 4] · [4, 2, 5]= (5×4)+(1×2)+(4×5) = 20+2+20 = 42. 연습으로[2, 3] · [4, 1]= 2×4 + 3×1 = 11.
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(np.dot(a, b)) # 42
print(a @ b) # 42 (@ 도 내적)
실무. 검색 엔진은 "검색어 벡터 · 문서 벡터" 의 내적으로 관련도 점수를 매겨 랭킹합니다. 값이 클수록 위에 노출되죠.
LLM 연결. 어텐션의 핵심이 내적입니다. "이 단어가 저 단어에 얼마나 주목하나" 를 두 단어 벡터의 내적으로 계산합니다(EP4·EP5). 내적을 알면 어텐션은 그냥 곱하고 더하기입니다.
더 깊이 — 3Blue1Brown 내적편
1.4 코사인 유사도 (Cosine Similarity)
두 벡터의 각도만으로 비슷함을 재는 값(-1~1)입니다. 크기는 무시하고 방향만 봅니다.
비유 — 같은 곳 보기. 두 사람이 같은 방향(0도)이면 1, 직각(90도)이면 0, 정반대(180도)면 -1입니다.
왜 내적 대신 쓰나. 내적은 크기에 휘둘립니다(긴 문서일수록 무조건 큼). 코사인은 길이를 1로 맞춰 순수 방향만 비교하므로, 길이가 다른 문서끼리도 공정하게 비교할 수 있습니다.
직접 해보기 —
[1, 0]과[2, 0]은 둘 다 오른쪽을 향하니(각도 0) 코사인 = 1.[1, 0]과[0, 1]은 직각(90도)이라 0 입니다.
from numpy.linalg import norm
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(round(a @ b / (norm(a) * norm(b)), 3)) # 0.949
실무. 스포티파이 "비슷한 곡", 벡터DB(Pinecone·Chroma)의 "유사 문서 검색" 이 전부 코사인 유사도입니다. 인기곡이든 신곡이든 분위기 방향이 같으면 추천되죠.
LLM 연결. RAG(검색증강생성, EP2)에서 "내 질문과 가장 비슷한 문서 찾기" 가 코사인 유사도입니다. 수백만 문서 중 방향이 가장 가까운 것을 즉시 검색합니다.
더 깊이 — Khan Academy
1.5 행렬 곱 (Matrix Multiplication)
행렬끼리 곱해 새로운 표로 변환하는 연산입니다. 내적을 여러 번 한꺼번에 하는 것이죠.
비유 — 변환 기계. 행렬 곱은 입력을 넣으면 모양이 바뀌어 나오는 기계입니다. "한국어 벡터 → 영어 의미 벡터" 변환기 자체가 행렬이고, 적용이 행렬 곱입니다.
직접 해보기 — 결과의 한 칸만 보면,
[[1,2],[3,4]] × [[5,6],[7,8]]의 [0,0] 칸은 1행[1,2]과 1열[5,7]의 내적 = (1×5)+(2×7) = 19 입니다. 즉 행렬 곱은 행과 열의 내적을 칸마다 반복하는 것입니다.
A = np.array([[1, 2], [3, 4]]); B = np.array([[5, 6], [7, 8]])
print(A @ B) # [[19 22] [43 50]]
실무. 신경망의 모든 층이 "입력 × 가중치 행렬" 입니다. 답변 1개에 수천 번의 행렬 곱이 일어나며, GPU 가 AI 에 필수인 이유가 바로 행렬 곱을 초고속 병렬로 하기 때문입니다(EP1 인프라).
LLM 연결. Transformer 한 층은 여러 행렬 곱입니다. 대형 모델이 "수천억 개 파라미터" 라는 말은 행렬 칸이 수천억 개라는 뜻입니다.
더 깊이 — 3Blue1Brown 행렬 곱편
1.6 고유값·고유벡터 (Eigenvalue·Eigenvector)
어떤 변환(행렬)을 적용해도 방향이 바뀌지 않는 특별한 화살표가 고유벡터, 그 늘어난 배율이 고유값입니다.
비유 — 도는 지구본의 축. 빙글 도는 지구본에서 남극–북극 축만 자리를 바꾸지 않습니다(다른 점은 모두 돕니다). 그 축이 고유벡터로, 변환의 본질적 방향을 알려줍니다.
직접 해보기 —
[[2,0],[0,3]]를[1,0]에 곱하면[2,0]이 됩니다. 방향은 그대로고 길이만 2배죠. 따라서[1,0]은 고유벡터, 2 는 고유값입니다.
A = np.array([[2, 0], [0, 3]])
vals, _ = np.linalg.eig(A)
print(vals) # [2. 3.] (고유값)
실무. 초창기 구글 페이지랭크가 거대 링크 행렬의 고유벡터 계산이었습니다. 데이터의 핵심 축을 뽑는 도구(PCA 차원축소)입니다.
LLM 연결. 차원 축소(PCA)·임베딩 분석에 쓰입니다. EP5 의 위치임베딩(RoPE)도 회전 행렬 개념과 닿아 있어, 고유값·회전 직관이 있으면 훨씬 수월합니다.
더 깊이 — 3Blue1Brown 고유값편
1.7 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 벡터 | 단어·문장의 의미 표현 (임베딩) |
| 행렬 | 문장 전체·모델 가중치 |
| 내적 | 어텐션 점수 (단어 간 주목도) |
| 코사인 유사도 | RAG 문서 검색·벡터DB |
| 행렬 곱 | 신경망 모든 층 (GPU 가속 대상) |
| 고유값 | 차원 축소·회전(RoPE 직관) |
한 문장으로, LLM 은 글자를 벡터로 바꾸고(임베딩) 행렬 곱으로 섞고 내적으로 서로 주목하게(어텐션) 만드는 거대한 선형대수 계산기입니다.
참고 자료 — 3Blue1Brown Essence of Linear Algebra (한국어 자막, 강력 추천) · Khan Academy Linear Algebra
클릭하거나 Space를 눌러 뒤집기